package web

import (
	regexp "github.com/dlclark/regexp2"
	"github.com/gin-gonic/gin"
	"net/http"
)

const (
	emailRegexPattern = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"
	// 和上面比起来，用 ` 看起来就比较清爽
	passwordRegexPattern = `^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$`
)

type UserHandler struct {
	emailRexExp    *regexp.Regexp
	passwordRexExp *regexp.Regexp
}

func NewUserHandler() *UserHandler {
	return &UserHandler{
		// 在 NewUserHandler 的时候预编译正则，加快速度
		emailRexExp:    regexp.MustCompile(emailRegexPattern, regexp.None),
		passwordRexExp: regexp.MustCompile(passwordRegexPattern, regexp.None),
	}
}

// RegisterRoutes 注册路由，传入一个engine，绑定对应handler的路由
func (h *UserHandler) RegisterRoutes(server *gin.Engine) {
	ug := server.Group("/users")
	{
		// 注册用户
		ug.POST("/signup", h.SignUp)
		// 用户登录
		ug.POST("/login", h.Login)
		// 获取用户信息
		ug.POST("/profile", h.Profile)
		// 修改用户信息
		ug.POST("/edit", h.Edit)
	}

}

// SignUp 注册用户
func (h *UserHandler) SignUp(ctx *gin.Context) {
	type SignupReq struct {
		Email           string `json:"email"`
		Password        string `json:"password"`
		ConfirmPassword string `json:"confirmPassword"`
	}

	var req SignupReq
	if err := ctx.Bind(&req); err != nil {
		return
	}
	ctx.String(http.StatusOK, "hello, 你正在注册")
}

// Login 用户登录
func (h *UserHandler) Login(ctx *gin.Context) {

}

// Profile 获取用户信息
func (h *UserHandler) Profile(ctx *gin.Context) {

}

// Edit 修改用户信息
func (h *UserHandler) Edit(ctx *gin.Context) {

}
